﻿namespace Brjnk.Maps
{
    using System.Collections.Generic;
    using System.Windows;
    using Brjnk.Maps.Downloader;

    /// <summary>
    /// Musí být thread-safe
    /// </summary>
    public interface IMapProvider
    {
        Size TileDIPSize { get; }

        /// <summary>
        /// Úrovně přiblížení. Musí být seřazeny od nejmenšího přiblížení směrem k největšímu přiblížení.
        /// </summary>
        IEnumerable<ZoomLevel> ZoomLevels { get; }

        /// <summary>
        /// Optimální přiblížení mapy. Menší než BigZoomLevel
        /// </summary>
        int OptimalZoomLevel { get; }

        /// <summary>
        /// Velké přiblížení mapy (pro podrobné vyznačení bodu na mapě)
        /// </summary>
        int BigZoomLevel { get; }

        IMapProjection Projection { get; }

        GetTileTask GetTile(TileId id, DownloadTaskPriority priority, NetworkMode mode);

        Point GetTileCoordinates(Point point, int zoomLevel);

        bool IsTileAvailable(TileId id);

        void Abort();
    }
}